package com.example.demo.service;

import com.example.demo.entity.Goods;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
* @author 15085202591
* @description 针对表【goods】的数据库操作Service
* @createDate 2024-05-31 21:14:59
*/
public interface GoodsService extends IService<Goods> {


    /**
     * 增加商品信息
     * @param goods 商品对象
     */
    void addGoods(Goods goods);


    /**
     * 根据id拿到商品描述
     * @param id 商品id
     */
    String getDescriptionById(Long id);


    /**
     * 根据id拿到商品信息
     * @param id 商品id
     */
    Goods getGoodsById(Long id);


    /**
     * 获取所有商品信息
     * @return 商品信息列表
     */
    List<Goods> getAllGoodsInfo();


    /**
     * 根据商品类型获取商品
     * @param type 商品类型
     * @return 商品信息列表
     */
    List<Goods> getGoodsByType(String type);


    /**
     * 根据价格范围筛选商品（一个最高价格，一个最低价格)
     * @param minPrice 最高价格
     * @param maxPrice 最低价格
     * @param goodsType 商品类型
     * @return List<Goods>
     */
    List<Goods> getGoodsInPriceRange(Long minPrice, Long maxPrice, String goodsType);


    /**
     * 根据价格从高到低排序商品
     * @return List<Goods>
     */
    List<Goods> getGoodsOrderByPriceDesc();


    /**
     * 根据价格从低到高排序商品
     * @return List<Goods>
     */
    List<Goods> getGoodsOrderByPriceAsc();


    /**
     * 根据id删除一条商品记录
     * @param id 商品id
     */
    void deleteGoodsById(Long id);


    /**
     * 根据商品名称获取商品
     * @param goodsName 商品名称
     * @param index 排序方式
     * @return 商品对象列表
     */
    List<Goods> getGoodsByName(String goodsName, Integer index);


    /**
     * 商家根据商品名称查询商品
     * @param goodsName 商品名称
     * @param index 排序方式
     * @param bid 商家id
     * @return
     */
    List<Goods> getGoodsByNameWithBId(String goodsName, Integer index, Long bid);


    /**
     * 根据商家id获取其商品
     * @param businessId 商家id
     * @return
     */
    List<Goods> getGoodsByBusinessId(Long businessId);


    /**
     * 根据商品id减少库存
     * @param goodsId 商品id
     * @param number 数量
     */
    Integer reduceGoodsByGoodsId(Long goodsId, Long number);

    void updateGood(Goods good);
}
